
//对于sqlite书库通常是一个库一个文件
// 对操作数据库sqlite的原生C语言API进行封装
// 创建/打开数据库
// 针对打开的数据库执行语句
// 关闭数据库
// sqlite
#include <iostream>
#include <string>
#include <sqlite3.h>

class SqliteHelper
{
public:
    typedef int (*callback)(void *, int, char **, char **);
    SqliteHelper(const std::string &dbfile) : _dbfile(dbfile), _handler(nullptr)
    {
    }
    // 默认是按照串行化的方式打开
    bool open(int safe_leve = SQLITE_OPEN_FULLMUTEX)
    {
        int ret = sqlite3_open_v2(_dbfile.c_str(), &_handler, safe_leve | SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, nullptr);
        if (ret != SQLITE_OK)
        {
            std::cout << "创建/打开数据库失败：";
            std::cout << sqlite3_errmsg(_handler);
            return false;
        }
        return true;
    }
    // 执行语句
    bool exec(const std::string &sql, callback cb, void *arg)
    {
        int ret = sqlite3_exec(_handler, sql.c_str(), cb, arg, nullptr);
        if (ret != SQLITE_OK)
        {
            std::cout<<sql<<std::endl;
            std::cout << "执行语句失败：";
            std::cout << sqlite3_errmsg(_handler);
            return false;
        }
        return true;
    }
    void close()
    {
        if(_handler)
            sqlite3_close_v2(_handler);
    }
private:
    sqlite3 *_handler;
    std::string _dbfile;
};
